int a[] = {1,2,3,4,5,6}; 则int (*ptr) = a; int *p = a[0] 有什么区别

来源:百度知道 编辑:UC知道 时间:2024/06/12 00:48:13
谢谢哦,我理解了,但是我使用int (*ptr) = a;时编译器告诉我是错误的类型转换,这是为什么呢?不是和int *ptr = a;等价吗?
(如果没有更好的回答kk8399091将被同意)

int *p = a[0]编译是不能通过的
int (*ptr) = a 就是用pstr指向数组a,从而可以用pstr对数组a直接操作(如修改内容)。

int (*ptr) 和int *p 本身是没有什么区别的,都是定义一个指针
只不过名字叫的不同而已,a表示数组的首地址,确切的说法应该是数组的第1个元素的地址,即在这里是a[0]的地址

下面几个是等价的写法
int (*ptr)=a; //ptr指向第一个元素1
int *q=a; //q指向第一个元素1
int *p=&a[0]; //p指向第一个元素1

给个程序你验证下把
#include <iostream>
using namespace std;
void main()
{
int a[] = {1,2,3,4,5,6};
int (*ptr)=a; //ptr指向第一个元素1
int *q=a; //q指向第一个元素1
int *p=&a[0]; //p指向第一个元素1
//输出验证
cout<<(*ptr)<<endl;
cout<<*q<<endl;
cout<<*p<<endl;
}

一个是对的,一个是错的<这个就是区别>

int *p = a[0], 全面为int指针类型变量,后面为int类

型变量

这样就是对的了: int *p = &a[0],

区别就是第一个是对的 第二个是错的:a[0]是元素 p是指针
int (*ptr) = a; <=>int *p = &a[0]

int* p;
p=a;
a是数组首地址;
把两个写到一起了

太神奇了,你的编译器竟然会提示你错误的类型转换,
我用gcc编译没有你说的错误类型转换。
这个问题不是问题,跟你的编译器有关吧